#include "widget.h"
#include "ui_widget.h"

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);

    my_thread = new My_Thread;//用this 的话就不用手动释放，这里选择不用this设置父对象，需要手动释放
    connect(my_thread,&My_Thread::threadSignal,[=](int val){
        ui->lcdNumber->display(QString::number(val));
    });


/*
    //不推荐， 堆区空间没有释放，会导致内存泄漏
    connect(this,&QObject::destroyed,[=](){
        my_thread->exit();
        my_thread->wait();
        delete my_thread;
        //my_thread->deleteLater();// 依赖于主事件循环，只有在主事件循环没有退出的情况下是安全的
    });
    //执行10s，会自动 调用 资源 回收
    connect(my_thread,&My_Thread::finished,[=](){
        my_thread->deleteLater();// 会调用 析构函数
    });
*/

}

Widget::~Widget()
{
    my_thread->exit();
    my_thread->wait();
    delete my_thread;// 如果没有父对象手动释放
    /*my_thread->deleteLater();// 依赖于主事件循环*/

    delete ui;//要放在线程后面销毁
}


void Widget::on_pushButton_clicked()
{
    qDebug()<<"主线程线程ID: "<<QThread::currentThreadId();
    my_thread->start();//每次点击按钮时，这会启动一个新的线程来执行 My_Thread::run() 方法。因此，每次启动的线程都是独立的，它们的线程 ID 也自然是不同的。
}
